import * as $ from "jquery";
import { GitlabConfig } from "./model";

let gitlabUrl = "";
let gitlabPrivateToken = "";

function refreshConfig() {
    chrome.storage.sync.get("gitlabConfig", (config) => {
        let data: GitlabConfig = config.gitlabConfig || {};
        gitlabPrivateToken = data.gitlabToken;
        gitlabUrl = data.gitlabUrl;

        if (gitlabUrl.lastIndexOf('/') === 0) {
            gitlabUrl = gitlabUrl.substr(0, gitlabUrl.length - 1);
        }
    });
    setTimeout(() => {
        refreshConfig();
    }, 5000);
}
refreshConfig();

export class SSLib {
    public static log(str: any): void {
        console.log(str);
    }

    public static getGitlabConfig(cb: (data: GitlabConfig) => void) {
        chrome.storage.sync.get("gitlabConfig", (config) => {
            let data: GitlabConfig = config.gitlabConfig || {};
            cb(data);
        });
    }

    public static gGet(url: string, cb: (data: any) => void) {
       this.gitlabRequest(url, 'GET', "", cb);
    }

    public static gitlabPost(url: string, body: object, cb: (data: any) => void) {
        this.gitlabRequest(url, 'POST', JSON.stringify(body || {}), cb);
    }

    public static gitlabRequest(url: string, method: "GET" | "POST", body: string, cb: (data: any) => void) {
        if (!gitlabPrivateToken) {
            console.warn('未设置gitlab private-token，可能会影响功能的正常使用');
        }

        if (url.indexOf('/') === 0) {
            url = gitlabUrl + url;
        }

        $.ajax({
            url,
            method,
            data: body,
            headers: { "Private-Token": gitlabPrivateToken,"Content-Type": "application/json" },
            success: (result) => {
                cb(result);
            },
        });
    }

    /**
     * 对Date的扩展，将 Date 转化为指定格式的String
     * 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
     * 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
     * 例子：
     * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
     * (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
     * @param date 
     * @param formatter 
     */
    public static dateFormatter(date: string | Date, fmt: string) {
        date = date || '';
        let dateObj: Date = date as Date;
        if (typeof date === 'string') {
            let dateStr = date.replace('/-/g', '/');
            dateObj = new Date(dateStr);
        }

        let o = {
            "M+": dateObj.getMonth() + 1, // 月份 
            "d+": dateObj.getDate(), // 日 
            "h+": dateObj.getHours(), // 小时 
            "m+": dateObj.getMinutes(), // 分 
            "s+": dateObj.getSeconds(), // 秒 
            "q+": Math.floor((dateObj.getMonth() + 3) / 3), // 季度 
            "S": dateObj.getMilliseconds() // 毫秒 
        };

        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (dateObj.getFullYear() + "").substr(4 - RegExp.$1.length));
        }

        for (let k in o) {
            if (new RegExp("(" + k + ")").test(fmt)) {
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
            }
        }
        return fmt;
    }

    public static GetQueryValue(queryName: string, url?: string): string {
        let reg = new RegExp("(^|&)" + queryName + "=([^&]*)(&|$)", "i");
        let r = (url || window.location.search.substr(1)).match(reg);
        if (r != null) {
            return decodeURI(r[2]);
        } else {
            return "";
        }
    }

    public static CopyToClipboard(copyStr: string) {
        // 创建input标签存放需要复制的文字
        const oInput = document.createElement('textarea');
        // 把文字放进input中，供复制
        oInput.value = copyStr;
        document.body.appendChild(oInput);
        // 选中创建的input
        oInput.select();
        // 执行复制方法， 该方法返回bool类型的结果，告诉我们是否复制成功
        const copyResult = document.execCommand('copy')
        // 操作中完成后 从Dom中删除创建的input
        document.body.removeChild(oInput)
        // 根据返回的复制结果 给用户不同的提示
        if (copyResult) {
            // message.success('DDL已复制到粘贴板')
        } else {
            alert('复制到剪切板失败');
        }
    }
}
